package Models

import (
	"github.com/mojocn/base64Captcha"
	"image/color"
)

//captcha图形验证码

// store 验证码存储对象，使用内存存储验证码信息
// var store = base64Captcha.DefaultMemStore
var store base64Captcha.Store = RedisStore{}

/*
MakeCaptcha 生成图形验证码
// 返回值:
//   string - 验证码ID
//   string - base64编码的验证码图片

	error  - 错误信息
*/
func MakeCaptcha() (string, string, error) {
	//一个接口类型，定义了生成验证码所需的方法,这个变量后续会被赋值为具体的验证码驱动实现
	var driver base64Captcha.Driver
	driverString := base64Captcha.DriverString{
		Height:          35,                                    // 验证码图片高度
		Width:           100,                                   // 验证码图片宽度
		Length:          1,                                     // 验证码长度
		NoiseCount:      0,                                     // 干扰线数量
		ShowLineOptions: 2 | 4,                                 // 干扰线选项
		Source:          "123456789qwertyuiopasdfghjklzxcvbnm", // 验证码字符集
		BgColor: &color.RGBA{ // 背景颜色(RGBA)
			R: 3,
			G: 102,
			B: 214,
			A: 125,
		},
		//// 使用的字体
		Fonts: []string{"wqy-microhei.ttc"},
	}
	// 把driverString实例化给driver，并转换字体配置
	driver = driverString.ConvertFonts()
	//创建验证码实例
	c := base64Captcha.NewCaptcha(driver, store)
	//生成验证码，answer设置为_是因为不安全
	id, b64s, _, err := c.Generate()
	return id, b64s, err
}

/*
VerifyCaptcha 验证验证码是否正确
参数:
id          - 验证码ID
VerifyValue - 用户输入的验证码值
返回值:
bool - 验证结果(true:验证成功, false:验证失败)
*/
func VerifyCaptcha(id string, VerifyValue string) bool {
	if store.Verify(id, VerifyValue, true) {
		return true
	} else {
		return false
	}
}
